package org.dromara.system.controller;

import com.alibaba.fastjson2.JSONObject;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.system.domain.bo.chart.OrderChartBo;
import org.dromara.system.domain.bo.chart.OrderNumBo;
import org.dromara.system.kernel.OrderChartKernel;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/PayChart")
public class PayChartController {

    private final OrderChartKernel orderChartKernel;

    /**
     * 收款账号订单统计
     * 前端访问路由地址为:/system/PayChart/account
     *
     * @param json 参数
     * @return 结果
     */
    @PostMapping("/account")
    public R<?> account(@RequestBody JSONObject json) {

        if (!json.containsKey("accountIds")) {
            return R.fail("缺少accountIds参数");
        }

        List<Long> accountIds = json.getJSONArray("accountIds").toList(Long.class);

        //收款账号订单统计
        return orderChartKernel.getAccountReceive(accountIds);
    }

    /**
     * 轮询组额度统计
     * 前端访问路由地址为:/system/PayChart/account
     *
     * @param json 参数
     * @return 结果
     */
    @PostMapping("/group")
    public R<?> group(@RequestBody JSONObject json) {

        if (!json.containsKey("groupIds")) {
            return R.fail("缺少groupIds参数");
        }

        List<Long> groupIds = json.getJSONArray("groupIds").toList(Long.class);

        //轮询组额度统计
        return orderChartKernel.getGroupAccountLimit(groupIds);
    }

    /**
     * 轮询组支付平台额度统计
     * 前端访问路由地址为:/system/PayChart/groupType
     *
     * @param json 参数
     * @return 结果
     */
    @PostMapping("/groupType")
    public R<?> groupType(@RequestBody JSONObject json) {

        if (!json.containsKey("groupId")) {
            return R.fail("缺少groupId参数");
        }

        //轮询组支付平台额度统计
        return orderChartKernel.getGroupTypeAccountLimit(json.getLong("groupId"));
    }

    /**
     * 应用收款统计
     * 前端访问路由地址为:/system/PayChart/account
     *
     * @param json 参数
     * @return 结果
     */
    @PostMapping("/app")
    public R<?> app(@RequestBody JSONObject json) {

        if (!json.containsKey("appIds")) {
            return R.fail("appIds");
        }

        List<Long> appIds = json.getJSONArray("appIds").toList(Long.class);

        //应用收款统计
        return orderChartKernel.getAppReceiveInfo(appIds);
    }

    /**
     * 订单数量统计
     * 前端访问路由地址为:/system/PayChart/orderCount
     *
     * @param bo 参数
     * @return 结果
     */
    @PostMapping("/orderCount")
    public R<?> orderCount(@RequestBody OrderNumBo bo) {
        //应用收款统计
        return orderChartKernel.getOrderCount(bo);
    }

    /**
     * 订单成功率图表
     * 前端访问路由地址为:/system/PayChart/successRate
     *
     * @param bo 参数
     * @return 结果
     */
    @PostMapping("/successRate")
    public R<?> getOrderSuccessRate(@RequestBody OrderChartBo bo) {
        //订单成功率图表
        return orderChartKernel.getOrderSuccessRate(bo);
    }

    /**
     * 订单各状态数量统计
     * 前端访问路由地址为:/system/PayChart/statusNum
     *
     * @param bo 参数
     * @return 结果
     */
    @PostMapping("/statusNum")
    public R<?> getOrderStatusNum(@RequestBody OrderNumBo bo) {
        //订单各状态数量统计
        return orderChartKernel.getOrderStatusNum(bo);
    }

    /**
     * 排行榜统计
     * 前端访问路由地址为:/system/PayChart/ranking
     *
     * @param bo 参数
     * @return 结果
     */
    @PostMapping("/ranking")
    public R<?> ranking(@RequestBody OrderChartBo bo) {
        //排行榜统计
        return orderChartKernel.getOrderRanking(bo);
    }

}
